///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	\file		CGenericObject.h
 *	\author		Fish
 *	\date		August 2, 2011
 *  \brief      Basic collidable game object base class
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef CGENERICOBJECT_H
#define CGENERICOBJECT_H

// Headers
#include "my_utilities/CRigidBody.h"

enum EObjectType { ASTEROID=0 };

class CGameEngine;

class CGenericObject
{
    public:
    //! Ctor, Dtor
                                CGenericObject(CPolygon p, float d=0.85f) : body_(CRigidBody(p, Vec2f(0.f, 0.f), 0.f, d))  {}
    virtual                     ~CGenericObject()                        {}

    virtual void                Update()                                 { body_.Update();                       }
    virtual void                Draw(CGameEngine *game)                  = 0;


    //! Getters
    inline  const Vec2f&        GetPos()        const   { return body_.GetPos();            }
    inline  const Vec2f&        GetVel()        const   { return body_.GetVel();            }
    inline  float               GetOrient()     const   { return body_.GetOrient();         }
    inline  float               GetAngVel()     const   { return body_.GetAngVel();         }
    inline  CRigidBody&         GetBody()               { return body_;                     }
    inline  CRect*              GetBoundingRect()       { return body_.GetBoundingRect();  }

    //! Setters
    inline  void                SetPos(Vec2f p)         { body_.SetPos(p);                  }
    inline  void                SetVel(Vec2f v)         { body_.SetVel(v);                  }
    inline  void                IncVel(Vec2f v)         { body_.IncVel(v);                  }
    inline  void                SetOrient(float o)      { body_.SetOrient(o);               }
    inline  void                SetAngVel(float av)     { body_.SetAngVel(av);              }
    inline  void                IncAngVel(float av)     { body_.IncAngVel(av);              }

    protected:
            CRigidBody          body_;

    // Temp


    //! Internal Methods
            //CGenericShip (const CGenericShip&); // Don't implement
};

#endif // CGENERICOBJECT_H
